package cn.ch.pet.service.impl;

import cn.ch.basic.service.impl.BaseServiceImpl;
import cn.ch.org.domain.Employee;
import cn.ch.pet.domain.Product;
import cn.ch.pet.domain.ProductComment;
import cn.ch.pet.domain.ProductDetail;
import cn.ch.pet.mapper.ProductCommentMapper;
import cn.ch.pet.mapper.ProductDetailMapper;
import cn.ch.pet.mapper.ProductMapper;
import cn.ch.pet.service.IProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author Why
 * @since 2022-03-01
 */
@Service
public class ProductServiceImpl extends BaseServiceImpl<Product> implements IProductService {

    @Autowired
    private ProductMapper productMapper;
    @Autowired
    private ProductDetailMapper productDetailMapper;
    @Autowired
    private ProductCommentMapper productCommentMapper;
    @Override
    public void addProductDetail(Product product, Employee employee) {
        //1.初始化得到的信息
        initPet(product);
        //2.保存宠物服务的基本信息
        productMapper.save(product);
        //3.获取到宠物服务的详情信息
        ProductDetail detail = product.getDetail();
        if(detail != null){//4.不为空时
            //5.根据宠物的id找到对应的detail
            detail.setProductId(product.getId());
            //6.把详细信息保存到里面
            productDetailMapper.save(detail);
        }
    }
    private void initPet(Product product) {
        product.setSalecount(0L);
    }

    @Override
    public void remove(Long id) {
        super.remove(id);
        productDetailMapper.deleteById(id);
    }

    @Override
    @Transactional
    public void onsale(List<Long> ids) {
        //1.审核需要上架的宠物信息是否合法
        for (Long id : ids) {
            //2.获取对应的宠物信息
            Product product = productMapper.loadById(id);
            //3.使用StringBuffer或StringBuilder的方式来存入数据，作为日志信息
            StringBuilder logNote = new StringBuilder();
            //4.使用百度的api接口来智能审核信息
        /*    if(!BaiduAuditUtils.TextCensor(product.getName())){
                //5.如果当前有的记录上架失败，那么失败存入的信息就直接跳过，其他合法的要成功记录
                logNote.append("对不起，您的宠物名称不符合规范，请修改！！！");
            }

            //审核resources 因为百度的审核次数，所以不适合，还是要进行扔审核才行
            String resources = product.getResources();
            if(!StringUtils.isEmpty(resources)){
                String[] split = resources.split(",");
                if(!BaiduAuditUtils.ImgCensor("http://47.95.117.210:8888"+split[0])){
                    //3.不合法  一个宠物信息不合法，全部上架失败吗？ 不是，只是当前记录上架失败，其他合法的要成功
                    logNote.append("宠物图片不合法！");
                }
            }*/


            if(logNote.length() > 0){//说明审核失败，记录了失败信息
                //1.创建审核日志
                ProductComment auditLog = new ProductComment();
                auditLog.setCreateTime(product.getCreatetime());
                //2.把设置的信息存入到宠物日志
                productCommentMapper.save(auditLog);

            }else{ //2.合法-调整状态、上架时间，保存审核日志
                Map<String, Object> map = new HashMap<>();
                //2.1要根据对应宠物id上架
                map.put("id", id);
                //添加上架时间
                map.put("onSaleTime", new Date());
                productMapper.onSale(map);
            }
        }
    }

    @Override
    public void offsale(List<Long> ids) {
        //2.用map存储数据
        Map<String, Object> map = new HashMap<>();
        //2.1要根据对应宠物id下架
        map.put("ids",ids);
        //2.2设置下架时间
        map.put("offSaleTime", new Date());
        productMapper.offSale(map);
    }

}
